package cn.xzqwjw.taskmanager.controller.api;

import cn.xzqwjw.taskmanager.domain.pojo.SysPurview;
import cn.xzqwjw.taskmanager.service.SysPurviewService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * @author rush
 */
@RestController
@RequestMapping("/api/purview")
@Validated
public class SysPurviewController {

  private final SysPurviewService purviewService;

  @Autowired
  public SysPurviewController(SysPurviewService purviewService) {
    this.purviewService = purviewService;
  }

  /**
   * 处理 "/api/purview" 的 POST 请求，添加权限，同时添加对应的路由
   */
  @PostMapping("")
  public String add(
      @NotNull(message = "参数不能为空")
      @RequestBody String paramsJson) {
    return purviewService.add(paramsJson);
  }

  /**
   * 处理 "/api/purview/batch" 的 POST 请求，批量添加权限
   */
  @PostMapping("/batch")
  public String addBatch(
      @RequestBody List<@Valid SysPurview> list) {
    return purviewService.addBatch(list);
  }

  /**
   * 处理 "/api/purview/{id}" 的 DELETE 请求，删除权限
   */
  @DeleteMapping("/{id:[0-9]+}")
  public String delById(
      @NotNull(message = "id不能为空")
      @Min(value = 1, message = "id必须大于0")
      @PathVariable Integer id) {
    return purviewService.delById(id);
  }

  /**
   * 处理 "/api/purview" 的 PUT 请求，修改权限信息
   */
  @PutMapping("")
  public String modifyAll(
      @NotNull(message = "参数不能为空")
      @Valid @RequestBody SysPurview purview) {
    return purviewService.modifyAll(purview);
  }

  // ==================== 查询 ====================

  /**
   * 根据id查询某个权限的详细信息
   */
  @GetMapping("/{id:[0-9]+}")
  public String queryById(
      @NotNull(message = "id不能为空")
      @Min(value = 1, message = "id必须大于0")
      @PathVariable Integer id) {
    return purviewService.queryById(id);
  }

  /**
   * 得到所有权限列表
   */
  @GetMapping("/list-all")
  public String listAll() {
    return purviewService.listAll();
  }

  /**
   * 添加角色时，要得到所有权限列表并按 tag 分类，以便设置全选功能
   */
  @GetMapping("/list-all/tag")
  public String listByTag() {
    return purviewService.listAllByTag();
  }

  /**
   * 添加/编辑权限时查询 label 是否已经使用过
   */
  @GetMapping("/check-label")
  public String checkLabel(
      @NotBlank(message = "参数不能为空")
      @RequestParam(value = "Label") String label) {
    return purviewService.checkLabel(label);
  }

  /**
   * 添加/编辑权限时查询name是否已经使用过
   */
  @GetMapping("/check-code")
  public String checkCode(
      @NotBlank(message = "参数不能为空")
      @RequestParam(value = "Code") String code) {
    return purviewService.checkCode(code);
  }

}
